package 二叉树;

import java.util.ArrayList;
import java.util.List;

public class NC45实现二叉树先序中序后序遍历 {

    /**
     * 分别按照二叉树先序，中序和后序打印所有的节点。
     * 示例1
     * 输入
     * 复制
     * {1,2,3}
     * 返回值
     * 复制
     * [[1,2,3],[2,1,3],[2,3,1]]
     */

    private List<Integer> preList=new ArrayList<>();
    private List<Integer> midList=new ArrayList<>();
    private List<Integer> lastList=new ArrayList<>();

    public int[][] threeOrders (TreeNode root) {

        dfs(root);

        int[][] result=new int[3][preList.size()];

        for (int i = 0; i < 3; i++) {
            List<Integer> temp=(i==0)?preList:(i==1)?midList:lastList;
            for (int j = 0; j < preList.size(); j++) {
                result[i][j]=temp.get(j);
            }
        }

        return result;
    }

    private void dfs(TreeNode node){

        if(node==null){
            return;
        }

        preList.add(node.val);
        dfs(node.left);
        midList.add(node.val);
        dfs(node.right);
        lastList.add(node.val);

    }

}
